<?php
namespace App\GraphQL\Queries\MarketingPolicy;

use App\Models\MarketingPolicy;
use GraphQL\Type\Definition\ResolveInfo;
use Nuwave\Lighthouse\Support\Contracts\GraphQLContext;

class QueryList
{

    /**
     * Return a value for the field.
     *
     * @param null $rootValue
     *            Usually contains the result returned from the parent field. In this case, it is always `null`.
     * @param mixed[] $args
     *            The arguments that were passed into the field.
     * @param \Nuwave\Lighthouse\Support\Contracts\GraphQLContext $context
     *            Arbitrary data that is shared between all fields of a single query.
     * @param \GraphQL\Type\Definition\ResolveInfo $resolveInfo
     *            Information about the query itself, such as the execution state, the field name, path to the field from the root, and more.
     * @return mixed
     */
    public function __invoke($rootValue, array $args, GraphQLContext $context, ResolveInfo $resolveInfo)
    {
        $query = MarketingPolicy::query();

        $page = $args['input']['page'];
        $keywords = $args['input']['keywords'];
        $cate = $args['input']['cate'] ?: '';
        $target = $args['input']['target'] ?: '';
        if ($keywords) {
            $query->where('name', 'LIKE', "%$keywords%");
        }
        if ($cate) {
            $query->where('cate', $cate);
        }
        if ($target) {
            $query->where('target', $target);
        }
        $pageInfo = $query->paginate($args['input']['limit'], [
            '*'
        ], 'page', $page);
        return [
            'data' => $pageInfo->items(),
            'paginatorInfo' => [
                'count' => $pageInfo->count(),
                'currentPage' => $pageInfo->currentPage(),
                'firstItem' => $pageInfo->firstItem(),
                'hasMorePages' => $pageInfo->hasMorePages(),
                'lastItem' => $pageInfo->lastItem(),
                'lastPage' => $pageInfo->lastPage(),
                'perPage' => $pageInfo->perPage(),
                'total' => $pageInfo->total()
            ]
        ];
    }

    public function echo($rootValue, array $args, GraphQLContext $context, ResolveInfo $resolveInfo)
    {
        // TODO implement the resolver
        return 'hh';
    }
}
